<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>numeric(数值)数据类型 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'number.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/number.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/number.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/number.html" rel="nofollow" target="_blank">../en/number.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">映射</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">字段数据类型</a></span>
»
<span class="breadcrumb-node">numeric(数值)数据类型</span>
</div>
<div class="navheader">
<span class="prev">
<a href="nested.html">« nested(嵌套)数据类型</a>
</span>
<span class="next">
<a href="object.html">object(对象)数据类型 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="number"></a>numeric(数值)数据类型
</h2>
</div></div></div>

<p>支持以下8种数字类型：</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<code class="literal">long</code>
</p>
</td>
<td valign="top">
<p>
带符号的64位整数，最小值为<code class="literal">-2<sup>63</sup></code>，最大值为<code class="literal">2<sup>63</sup>-1</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">integer</code>
</p>
</td>
<td valign="top">
<p>
带符号的32位整数，最小值为<code class="literal">-2<sup>31</sup></code>，最大值为<code class="literal">2<sup>31</sup>-1</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">short</code>
</p>
</td>
<td valign="top">
<p>
带符号的16位整数，最小值为<code class="literal">-32,768</code>，最大值为<code class="literal">32,767</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">byte</code>
</p>
</td>
<td valign="top">
<p>
带符号的8位整数，最小值为<code class="literal">-128</code>，最大值为<code class="literal">127</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">double</code>
</p>
</td>
<td valign="top">
<p>
双精度64位 IEEE 754 浮点数，仅限于有限值。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">float</code>
</p>
</td>
<td valign="top">
<p>
单精度32位 IEEE 754 浮点数，仅限于有限值。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">half_float</code>
</p>
</td>
<td valign="top">
<p>
半精度32位 IEEE 754 浮点数，仅限于有限值。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">scaled_float</code>
</p>
</td>
<td valign="top">
<p>
一个由<code class="literal">long</code>支持的浮点数，按固定的<code class="literal">double</code>缩放因子进行缩放。
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>下面是一个使用 numeric 字段配置映射的示例：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "properties": {
      "number_of_bytes": {
        "type": "integer"
      },
      "time_in_seconds": {
        "type": "float"
      },
      "price": {
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/674.console"></div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>
<code class="literal">double</code>、<code class="literal">float</code>及<code class="literal">half_float</code>类型认为<code class="literal">-0.0</code>和<code class="literal">+0.0</code>的值是不同的。

因此，在<code class="literal">-0.0</code>上进行<code class="literal">term</code>查询将与<code class="literal">+0.0</code>不匹配，反之亦然。

对于 range 查询也是一样：如果上限是<code class="literal">-0.0</code>，则<code class="literal">+0.0</code>将不匹配，如果下限是<code class="literal">+0.0</code>，则<code class="literal">-0.0</code>将不匹配。
</p>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_which_type_should_i_use"></a>应该使用哪一种类型？
</h3>
</div></div></div>
<p>
就整数类型(<code class="literal">byte</code>、<code class="literal">short</code>、<code class="literal">integer</code>和<code class="literal">long</code>)而言，应该选择满足用例的最小类型。

这将有助于提高编制索引和搜索的效率。

但是请注意，存储是基于存储的实际值进行优化的，因此选择一种类型而不是另一种类型不会影响存储需求。
</p>
<p>
对于浮点类型，使用缩放因子将浮点数据存储到整数中通常更有效，这就是<code class="literal">scaled_float</code>类型在底层所做的。 

例如，<code class="literal">price</code>字段可以存储在<code class="literal">scaling_factor</code>值为<code class="literal">100</code>的<code class="literal">scaled_float</code>中。

所有api的工作原理都是将字段存储为一个 double 类型，但实际上 Elasticsearch 的工作原理是使用一个美分的数值，<code class="literal">price*100</code>，这是一个整数。 

这对于节省磁盘空间很有帮助，因为整数比浮点更容易压缩。

<code class="literal">scaled_float</code>也可以用来以精度换取磁盘空间。

例如，假设你正在跟踪一个<code class="word">0</code>到<code class="word">1</code>之间的数字的 cpu 利用率。

cpu 利用率是<code class="word">12.7%</code>还是<code class="word">13%</code>通常没有多大关系，因此可以使用<code class="literal">scaling_factor</code> 值为<code class="word">100</code>的<code class="literal">scaled_float</code>，以便将 cpu 利用率四舍五入到最接近的百分比，从而节省空间。
</p>
<p>
如果<code class="literal">scaled_float</code>不是一个很好的选择，那么ni 应该在浮点类型(<code class="literal">double</code>、<code class="literal">float</code>及<code class="literal">half_float</code>)中选择一个对用例来说足够的最小类型。

下面这个表格对这些类型进行了比较，以帮助你做出决定。
</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
<col class="col_4">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">类型</th>
<th align="left" valign="top">最小值</th>
<th align="left" valign="top">最大值</th>
<th align="left" valign="top">有效位数/数字</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">double</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-1074</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">(2-2<sup>-52</sup>)·2<sup>1023</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">53</code> / <code class="literal">15.95</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">float</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-149</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">(2-2<sup>-23</sup>)·2<sup>127</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">24</code> / <code class="literal">7.22</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">half_float</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-24</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">65504</code></p></td>
<td align="left" valign="top"><p><code class="literal">11</code> / <code class="literal">3.31</code></p></td>
</tr>
</tbody>
</table>
</div>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<h3>映射数值型标识</h3>
<p>
并非所有数值数据都应映射为<a class="xref" href="number.html" title="numeric数据类型" rel="nofollow">数值型</a>字段数据类型。

Elasticsearch 为<a class="xref" href="query-dsl-range-query.html" title="范围查询"><code class="literal">范围(range)</code></a>查询优化数值型字段，如<code class="literal">integer</code>或<code class="literal">long</code>。

但是，<code class="literal">keyword</code>字段更适合于<a class="xref" href="query-dsl-term-query.html" title="term 查询"><code class="literal">term</code></a>和其他<a class="xref" href="term-level-queries.html" title="词级查询">词级</a>查询。
</p>
<p>
标识(identifier)，如 ISBN 或产品ID，很少在<code class="literal">范围(range)</code>查询中使用。

但是，通常使用词级查询来检索它们。
</p>
<p>在以下情况下，考虑将数值型标识映射为<code class="literal">keyword</code>：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
你不打算使用<a class="xref" href="query-dsl-range-query.html" title="范围查询"><code class="literal">range</code></a>查询来搜索标识数据。
</li>
<li class="listitem">
快速检索很重要。

<code class="literal">keyword</code>字段上的<code class="literal">term</code>查询搜索通常比数值型字段上的<code class="literal">term</code>搜索更快。
</li>
</ul>
</div>
<p>
如果你不确定应该使用哪一种，可以使用<a class="xref" href="multi-fields.html" title="fields">多字段(multi-field)</a>将数据映射为<code class="literal">keyword</code><em>和</em>数值型数据类型。
</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="number-params"></a>数值字段的参数
</h3>
</div></div></div>
<p>数值类型接受以下参数:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<a class="xref" href="coerce.html" title="coerce"><code class="literal">coerce</code></a>
</p>
</td>
<td valign="top">
<p>尝试将字符串转换为数字，并截断整数的小数部分。接受<code class="literal">true</code> (默认) 和<code class="literal">false</code>。</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-boost.html" title="boost"><code class="literal">boost</code></a>
</p>
</td>
<td valign="top">
<p>映射字段级查询时提升。接受浮点数，默认值为<code class="literal">1.0</code>。</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="doc-values.html" title="doc_values"><code class="literal">doc_values</code></a>
</p>
</td>
<td valign="top">
<p>
是否应该以列跨度(column-stride)的方式将字段存储在磁盘上，以便以后用于排序、聚合或编写脚本? 接受<code class="literal">true</code>(默认) 或<code class="literal">false</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="ignore-malformed.html" title="ignore_malformed"><code class="literal">ignore_malformed</code></a>
</p>
</td>
<td valign="top">
<p>
如果为<code class="literal">true</code>，则忽略格式错误的数字。

如果为<code class="literal">false</code>(默认值)，格式错误的数字会抛出异常并拒绝整个文档。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-index.html" title="index"><code class="literal">index</code></a>
</p>
</td>
<td valign="top">
<p>
该字段应该是可搜索的吗？接受<code class="literal">true</code> (默认) 和 <code class="literal">false</code>。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="null-value.html" title="null_value"><code class="literal">null_value</code></a>
</p>
</td>
<td valign="top">
<p>
接受与字段<code class="literal">type</code>相同的数值，用于替换任何显式<code class="literal">null</code>值。

默认值为<code class="literal">null</code>，这意味着该字段被视为缺失。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-store.html" title="store"><code class="literal">store</code></a>
</p>
</td>
<td valign="top">
<p>
字段值是否应该与<a class="xref" href="mapping-source-field.html" title="_source字段" rel="nofollow"><code class="literal">_source</code></a>字段分开存储和检索。

接受<code class="literal">true</code>或<code class="literal">false</code> (默认)。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-field-meta.html" title="meta"><code class="literal">meta</code></a>
</p>
</td>
<td valign="top">
<p>
字段的元数据。
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="scaled-float-params"></a><code class="literal">scaled_float</code>的参数
</h3>
</div></div></div>
<p><code class="literal">scaled_float</code>接受一个额外的参数：</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<code class="literal">scaling_factor</code>
</p>
</td>
<td valign="top">
<p>
对值进行编码时使用的缩放因子。

值将在编制索引时乘以该因子，并舍入到最接近的长整型(long)值。

例如，<code class="literal">scaled_float</code>的<code class="literal">scaling_factor</code>为<code class="literal">10</code>，它会在内部将<code class="literal">2.34</code>存储为<code class="literal">23</code>，所有搜索时操作(查询、聚合、排序)都将表现为文档的值为<code class="literal">2.3</code>。

较高的<code class="literal">scaling_factor</code>值提高了精度，但也增加了空间需求。

此参数是必需的。
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="nested.html">« nested(嵌套)数据类型</a>
</span>
<span class="next">
<a href="object.html">object(对象)数据类型 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>